package ControleAcademico.Model.Dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Atividade;
import ControleAcademico.Model.Pojo.HistoricoAtividade;

public class HistoricoAtividadeImpl implements HistoricoAtividadeDao {

	private ArrayList<HistoricoAtividade> listaDeHistoricoAtividades;
	private AlunoImpl alunoImpl;
	private AtividadeImpl atividadeImpl;
	
	public HistoricoAtividadeImpl(){
		listaDeHistoricoAtividades = new ArrayList<HistoricoAtividade>();
	}
	public HistoricoAtividadeImpl(AlunoImpl alunoImpl,AtividadeImpl atividadeImpl){
		listaDeHistoricoAtividades = new ArrayList<HistoricoAtividade>();
		this.atividadeImpl = atividadeImpl;
		this.alunoImpl = alunoImpl;
	}
	
	@Override	
	public void salvar(HistoricoAtividade historicoAtividade, int flag){
			
		try{
			if (flag != -1) {
				listaDeHistoricoAtividades.add(historicoAtividade);
			} else {
				PrintWriter p = new PrintWriter("HistoricoAtividade.txt");

				for(HistoricoAtividade i : listaDeHistoricoAtividades){
					p.write(i.getId()+"\t");
					p.write(i.getNota()+"\t");
					p.write ("Aluno\t");
					p.write (i.getAluno().getId()+"\t");
					p.write ("Atividade\t");
					p.write(i.getAtividade().getId()+"\t");
					p.write("#");
					p.write("\n");
				}
				p.close();
			}
		}catch(Exception e){
			
		}
	}
		
	public ArrayList<HistoricoAtividade> getListaDeHistoricoAtividades() {
		return listaDeHistoricoAtividades;
	}
		
	public ArrayList<HistoricoAtividade> pesquisarHistoricoAtividade(Aluno aluno){
			ArrayList<HistoricoAtividade> historicoAtividade = new ArrayList<HistoricoAtividade>();
			
		for(HistoricoAtividade i:listaDeHistoricoAtividades){
			if(i.getAluno().getCpf().equals(aluno.getCpf())){
				historicoAtividade.add(i);
			}
		}
		return historicoAtividade;
	}	
		
	public HistoricoAtividade pesquisarHistoricoAtividade(int id){
			
			HistoricoAtividade historicoAtividade = null;
			
			for(HistoricoAtividade i:listaDeHistoricoAtividades){
				if(i.getId() == id){
					historicoAtividade = i;
					return historicoAtividade;
				}
			}
			return historicoAtividade;
	}
		
	public HistoricoAtividade pesquisarArquivo(int id){
		String linha;
		HistoricoAtividade historicoAtividade = null;

		try {
			FileReader reader = new FileReader("HistoricoAtividade.txt");    	
			BufferedReader leitor = new BufferedReader(reader);
		        
        while ((linha = leitor.readLine()) != null) {
	        	String[] dados = linha.split("\t");
	        	if(dados[0].equals(id+"")){
	        		historicoAtividade = new HistoricoAtividade(Integer.parseInt(dados[0]));
	        		return historicoAtividade;
	        	}
	        }
		}catch(IOException e){
			e.printStackTrace();
		}
	        return historicoAtividade;
			
		}
		
		@Override
		public void carregar() {
			
		      String linha = null; 
		      
		      try {  
		    	 FileReader reader = new FileReader("HistoricoAtividade.txt");    	
		         BufferedReader leitor = new BufferedReader(reader);  
		         Aluno aluno;
		         Atividade atividade;
		         HistoricoAtividade historicoAtividade=null;

		         while ((linha = leitor.readLine()) != null) {  
		            String[] dados = linha.split("\t"); 
		            int identificador = Integer.parseInt(dados[0]);
		            
		            if (!this.pesquisarNaListaImpl(Integer.parseInt(dados[0]))){
		            	historicoAtividade = new HistoricoAtividade(Integer.parseInt(dados[0]));
		            	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[3]));
		            	atividade = atividadeImpl.pesquisarArquivo(Integer.parseInt(dados[5]));
		            	atividadeImpl.adicionarAtividade(atividade);
			            historicoAtividade.setAluno(aluno);
			            historicoAtividade.setAtividade(atividade);
			            historicoAtividade.setNota(Integer.parseInt(dados[1]));
			            listaDeHistoricoAtividades.add(historicoAtividade); 
		            }else{
		            	for (HistoricoAtividade i : listaDeHistoricoAtividades) {
							if (i.getId() == identificador){
								historicoAtividade = i;
							}
						}
		            	aluno = alunoImpl.pesquisarNaListaImpl(Integer.parseInt(dados[3]));
		            	atividade = atividadeImpl.pesquisarArquivo(Integer.parseInt(dados[5]));
		            	atividadeImpl.adicionarAtividade(atividade);
			            historicoAtividade.setAluno(aluno);
			            historicoAtividade.setAtividade(atividade);
			            historicoAtividade.setNota(Integer.parseInt(dados[1]));
		            }
		         }  
		         leitor.close();  
		         reader.close();  
		      } catch (Exception e) { 
		    	  
		      }  
		  }
		
		public void adicionarHistoricoAtividade (HistoricoAtividade historicoAtividade){
			this.listaDeHistoricoAtividades.add(historicoAtividade);
		}
		
		public void setAlunoImpl(AlunoImpl alunoImpl) {
			this.alunoImpl = alunoImpl;
		}
		
		public void setAtividadeImpl(AtividadeImpl atividadeImpl) {
			this.atividadeImpl = atividadeImpl;
		}
		
		public boolean pesquisarNaListaImpl(int id){
			for (HistoricoAtividade historicoAtividade: listaDeHistoricoAtividades) {
				if (historicoAtividade.getId() == id){
					return true;		
				}
			}
			return false;
		}
}
